/**
 *
 * @param map 表示地图
 * @param i 从哪里开始找  1
 * @param j             1
 * 0 表示没有走过 1表示墙 2表示可以走 3表示走过了但走不通
 * 走迷宫策略 下->右->上->左 如果走不通 再回溯
 * 从哪里开始找 （1，1）  找到哪里     （6，5）
 */
function setWay (map, i, j) {
    if (map[6][5] === 2) { // 表示已经找到了
        return true
    } else {
        if (map[i][j] === 0) { // 还没走过
            map[i][j] = 2 //假定可以走
            if (setWay(map, i + 1, j)) { // 向下走
                return true
            } else if (setWay(map, i, j + 1)) { // 向右走
                return true
            } else if (setWay(map, i - 1, j)) { // 向上走
                return true
            } else if (setWay(map, i, j - 1)) { // 向左走
                return true
            } else { // 都没走通 说明该点是死路
                map[i][j] = 3
                return false
            }
        } else { // 如果不为0 可能是1 2 3
            return false
        }
    }
}

function main () {
    // 创建一个二维数组模拟迷宫
    let map = Array(8).fill(0).map(() => Array(7).fill(0))
    for (let i = 0; i < 7; i++) {
        map[0][i] = 1
        map[7][i] = 1
    }
    for (let i = 0; i < 8; i++) {
        map[i][0] = 1
        map[i][6] = 1
    }
    map[3][1] = 1
    map[3][2] = 1
    console.table(map)

    // 使用递归回溯
    setWay(map, 1, 1)
    console.table(map)
}

main()
